package main

import (
	"fmt"
	"sync"
)

/*
	WaitGroup：用于等待一组线程的结束。父线程调用Add方法来设定应等待的线程的数量。
	每个被等待的线程在结束时应调用Done方法。
	同时，主线程里可以调用Wait方法阻塞至所有线程结束。

		func (wg *WaitGroup) Add(delta int) 计数器+1
		func (wg *WaitGroup) Done() 计数器-1
		func (wg *WaitGroup) Wait() 等待 计数器为0

*/
var wg sync.WaitGroup

func test(i int) {
	defer wg.Done()
	fmt.Println("hello", i)
}

func main() {
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go test(i)
	}
	wg.Wait()
}
